import { IPSAppCodeList } from '../codelist/ipsapp-code-list';
import { IPSAppDELogic } from './ipsapp-delogic';
import { IPSAppDEMethod } from './ipsapp-demethod';
import { IPSDEDQCondition } from '../../dataentity/ds/ipsdedqcondition';
import { IPSDEDQGroupCondition } from '../../dataentity/ds/ipsdedqgroup-condition';

/**
 *
 * @export
 * @interface IPSAppDEDataSet
 */
export interface IPSAppDEDataSet extends IPSAppDEMethod {
  /**
   * 上下文数据条件
   *
   * @type {IPSDEDQCondition[]}
   */
  getADPSDEDQConditions(): IPSDEDQCondition[] | null;

  /**
   * 执行之后代码
   * @type {string}
   */
  afterCode: string;

  /**
   * 执行之前代码
   * @type {string}
   */
  beforeCode: string;

  /**
   * 结果集类型
   * @description 值模式 [实体数据集类型] {DATAQUERY：数据查询、 INDEXDE：索引实体、 MULTIFORM：多表单、 CODELIST：代码表、 DELOGIC：实体逻辑、 SCRIPT：脚本代码、 REMOTE：远程接口数据集 }
   * @type {( string | 'DATAQUERY' | 'INDEXDE' | 'MULTIFORM' | 'CODELIST' | 'DELOGIC' | 'SCRIPT' | 'REMOTE')}
   * @default REMOTE
   */
  dataSetType:
    | string
    | 'DATAQUERY'
    | 'INDEXDE'
    | 'MULTIFORM'
    | 'CODELIST'
    | 'DELOGIC'
    | 'SCRIPT'
    | 'REMOTE';

  /**
   * 应用代码表
   *
   * @type {IPSAppCodeList}
   */
  getPSAppCodeList(): IPSAppCodeList | null;

  /**
   * 实体处理逻辑
   *
   * @type {IPSAppDELogic}
   */
  getPSAppDELogic(): IPSAppDELogic | null;

  /**
   * 本地过滤条件
   *
   * @type {IPSDEDQGroupCondition[]}
   */
  getPSDEDQGroupConditions(): IPSDEDQGroupCondition[] | null;

  findPSDEDQGroupCondition(objKey: any): IPSDEDQGroupCondition | null;

  /**
   * 预定义类型
   * @description 值模式 [云实体结果集合预定义类型] {CODELIST：代码表、 INDEXDE：索引实体、 MULTIFORM：多表单、 DELOGIC：实体处理逻辑、 SCRIPT：脚本代码、 REMOTE：远程接口数据集 }
   * @type {( string | 'CODELIST' | 'INDEXDE' | 'MULTIFORM' | 'DELOGIC' | 'SCRIPT' | 'REMOTE')}
   */
  predefinedType:
    | string
    | 'CODELIST'
    | 'INDEXDE'
    | 'MULTIFORM'
    | 'DELOGIC'
    | 'SCRIPT'
    | 'REMOTE';

  /**
   * 脚本代码
   * @type {string}
   */
  scriptCode: string;

  /**
   * 自定义代码
   * @type {boolean}
   * @default false
   */
  customCode: boolean;
}
